/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package fr.sorbonne.inf1.tp3.vue;

import fr.sorbonne.inf1.tp3.controleur.Controleur;
import fr.sorbonne.inf1.tp3.properties.BundleTool;
import java.awt.BorderLayout;
import java.util.Locale;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;

/**
 * 
 * @author Dubos Romain
 * @author Oukherfellah Riad
 */
public final class Vue extends JFrame {

    //OBJETS DU MENU
    private JMenu menu, langue;
    private JMenuItem quitter, francais, anglais;
    //ACTION COMMANDES DU MENU
    public static final String MENU = "menu";
    public static final String QUITTER = "quitter";
    public static final String LANGUE = "langue";
    public static final String FRANCAIS = "francais";
    public static final String ANGLAIS = "anglais";
    //MESSAGES ET TITRES
    public static String T1; //titre de la boite de dialogue
    public static String M1; //Message dans la boite de dialogue
    public static String T2;
    public static String M2;
    public static String T3;
    public static String M3;
    public static String T4;
    public static String M4;
    public static String T5;
    public static String T6;
    public static String M6;
    public static String T7;
    public static String M7;
    public static String T8;
    public static String M8;
    //BOUTONS
    private JButton calculer, effacer;
    //ACTION COMMANDE DES BOUTONS
    public static final String CALCULER = "calculer";
    public static final String EFFACER = "effacer";
    //JTextField
    public JTextField taux, montant, autre;
    //ACTION COMMANDE DES JTextField
    public static final String MONTANT = "montant";
    public static final String TAUX = "taux";
    public static final String AUTRE = "autre";
    //JLabel
    private JLabel lTaux, lMontant, lAutre, lCalculAnnuite, lCalculNbAnnees;
    //JRadioButtons
    private JRadioButton radioAnnuite, radioNbAnnees;
    //ACTION COMMANDE DES JRadioButtons
    public static final String ANNUITE = "annuite";
    public static final String NBANNEES = "nbannees";

    /**
     * Constructeur de la vue
     */
    public Vue() {

        this.setSize(600, 170);
        this.setLocation(320, 170);
        this.setLayout(new BorderLayout());

        this.initiliseBarMenu();

        this.add(this.panelRadioButton(), BorderLayout.NORTH);
        this.add(this.panelBoutons(), BorderLayout.SOUTH);
        this.add(this.panelInputs(), BorderLayout.CENTER);

        this.nommerComposants();
        this.bloqueItemLangueCourante();

        this.setVisible(true);
    }

    /**
     * Initalisation de la barre de menu et
     * de ses coposants
     */
    private void initiliseBarMenu() {
        this.quitter = new JMenuItem();
        this.quitter.setActionCommand(QUITTER);
        this.langue = new JMenu();
        this.langue.setActionCommand(LANGUE);
        this.francais = new JMenuItem();
        this.francais.setActionCommand(FRANCAIS);
        this.anglais = new JMenuItem();
        this.anglais.setActionCommand(ANGLAIS);


        this.langue.add(this.francais);
        this.langue.add(this.anglais);

        this.menu = new JMenu();

        this.menu.add(this.langue);
        this.menu.add(quitter);

        JMenuBar menuBar = new JMenuBar();
        menuBar.add(menu);
        this.setJMenuBar(menuBar);

    }

    private JPanel panelBoutons() {
        JPanel panelBouton = new JPanel();

        this.calculer = new JButton();
        this.calculer.setActionCommand(CALCULER);
        this.effacer = new JButton();
        this.effacer.setActionCommand(EFFACER);

        panelBouton.add(this.calculer);
        panelBouton.add(this.effacer);

        return panelBouton;
    }

    private JPanel panelInputs() {
        JPanel panelInput = new JPanel();

        this.taux = new JTextField(2);
        this.taux.setActionCommand(TAUX);
        this.montant = new JTextField(2);
        this.montant.setActionCommand(MONTANT);
        this.autre = new JTextField(2);
        this.autre.setActionCommand(AUTRE);

        this.lTaux = new JLabel();
        this.lMontant = new JLabel();
        this.lAutre = new JLabel();

        panelInput.add(this.lTaux);
        panelInput.add(this.taux);
        panelInput.add(this.lMontant);
        panelInput.add(this.montant);
        panelInput.add(this.lAutre);
        panelInput.add(this.autre);

        return panelInput;
    }

    private JPanel panelRadioButton() {
        JPanel panelRadio = new JPanel();

        this.radioAnnuite = new JRadioButton();
        this.radioAnnuite.setActionCommand(ANNUITE);
        this.radioNbAnnees = new JRadioButton();
        this.radioNbAnnees.setActionCommand(NBANNEES);
        this.radioNbAnnees.setSelected(true);

        this.lCalculAnnuite = new JLabel();
        this.lCalculNbAnnees = new JLabel();

        ButtonGroup bg = new ButtonGroup();
        bg.add(this.radioAnnuite);
        bg.add(this.radioNbAnnees);

        panelRadio.add(lCalculAnnuite);
        panelRadio.add(this.radioAnnuite);
        panelRadio.add(lCalculNbAnnees);
        panelRadio.add(this.radioNbAnnees);

        return panelRadio;
    }

    /**
     * Permet de nommer l'ensemble des coposants
     * et titre de l'application
     */
    public final void nommerComposants() {

        setTitle(BundleTool.getBundle().getString("titre"));
        this.quitter.setText(BundleTool.getBundle().getString("quitter"));
        this.menu.setText(BundleTool.getBundle().getString("menu"));
        this.langue.setText(BundleTool.getBundle().getString("langue"));
        this.francais.setText(BundleTool.getBundle().getString("fr_FR"));
        this.anglais.setText(BundleTool.getBundle().getString("en_GB"));

        //BOUTONS
        this.calculer.setText(BundleTool.getBundle().getString("calculer"));
        this.effacer.setText(BundleTool.getBundle().getString("effacer"));

        //JLABEL
        this.lTaux.setText(BundleTool.getBundle().getString("taux"));
        this.lMontant.setText(BundleTool.getBundle().getString("montant"));
        this.lAutre.setText(BundleTool.getBundle().getString("annuite"));
        this.lCalculAnnuite.setText(BundleTool.getBundle().getString("calculAnnuite"));
        this.lCalculNbAnnees.setText(BundleTool.getBundle().getString("calculNbAnnees"));

        //MESSAGES ET TITRES
        T1 = BundleTool.getBundle().getString("T1");
        M1 = BundleTool.getBundle().getString("M1");
        T2 = BundleTool.getBundle().getString("T2");
        M2 = BundleTool.getBundle().getString("M2");
        T3 = BundleTool.getBundle().getString("T3");
        M3 = BundleTool.getBundle().getString("M3");
        T4 = BundleTool.getBundle().getString("T4");
        M4 = BundleTool.getBundle().getString("M4");
        T5 = BundleTool.getBundle().getString("T5");
        T6 = BundleTool.getBundle().getString("T6");
        M6 = BundleTool.getBundle().getString("M6");
        T7 = BundleTool.getBundle().getString("T7");
        M7 = BundleTool.getBundle().getString("M7");
        T8 = BundleTool.getBundle().getString("T8");
        M8 = BundleTool.getBundle().getString("M8");

    }

    /**
     * Abonne les éléments de la vue avec leur
     * listener
     * @param ctrl controleur de l'application
     */
    public void abonnement(Controleur ctrl) {

        //ABONNEMENT MENU_ITEM        
        this.francais.addActionListener(ctrl);
        this.anglais.addActionListener(ctrl);
        this.quitter.addActionListener(ctrl);

        //ABONNEMENT BOUTONS
        this.calculer.addActionListener(ctrl);
        this.effacer.addActionListener(ctrl);

        //ABONNEMENT RADIOBUTTONS
        this.radioAnnuite.addActionListener(ctrl);
        this.radioNbAnnees.addActionListener(ctrl);

        //Quitter (fenetre)
        this.addWindowListener(ctrl);
    }

    /**
     * Affiche une fenetre de dialogue avec
     * un message d'information destiné à l'utilisateur
     * @param titre titre de la fenetre de dialogue
     * @param message message à afficher
     */
    public void afficherMessageInfo(String titre, String message) {
        JOptionPane.showMessageDialog(this, message,
                titre,
                JOptionPane.INFORMATION_MESSAGE);
    }

    /**
     * Affiche une fenetre de dialogue avec
     * un message d'erreur destiné à l'utilisateur
     * @param titre titre de la fenetre de dialogue
     * @param message message à afficher
     */
    public void afficherMessageErreur(String titre, String message) {
        JOptionPane.showMessageDialog(this, message,
                titre,
                JOptionPane.WARNING_MESSAGE);
    }

    /**
     * Grise l'item de selection de la langue
     * déjà en place
     */
    public final void bloqueItemLangueCourante() {
        Locale localeCourante = BundleTool.getBundle().getLocale();
        if (localeCourante.equals(Locale.FRANCE)) {
            this.francais.setEnabled(false);
        } else {
            this.francais.setEnabled(true);
        }
        if (localeCourante.equals(Locale.UK)) {
            this.anglais.setEnabled(false);
        } else {
            this.anglais.setEnabled(true);
        }
    }

    /**
     * Renvoie le montant saisie 
     * @return String du montant
     */
    public String montant() {
        return this.montant.getText();
    }

    /**
     * Renvoie le taux saisie
     * @return String du taux
     */
    public String taux() {
        return this.taux.getText();
    }

    /**
     * Renvoie selon le cas l'annuité ou le nb d'années
     * @return String de l'annuité ou du nb d'années
     */
    public String autre() {
        return this.autre.getText();
    }
    
    /**
     * Renvoie l'état du radio button annuité
     * @return true si selectionné
     */
    public Boolean annuiteIsChecked() {
        return this.radioAnnuite.isSelected();
    }
    
    /**
     * Renvoie l'état du radio button nb_année
     * @return true si selectionné
     */
    public Boolean nbAnneesIsChecked() {
        return this.radioNbAnnees.isSelected();
    }
    
    public void changeTextToNbAnnees(){
        this.lAutre.setText(BundleTool.getBundle().getString("nbAnnees"));
    }
    
    public void changeTextToAnnuite(){
        this.lAutre.setText(BundleTool.getBundle().getString("annuite"));
    }
    
    /**
     * Vide l'ensemble des inputs
     */
    public void effacerChamps(){
        this.montant.setText("");
        this.taux.setText("");
        this.autre.setText("");
    }
}
